\NeedsTeXFormat{LaTeX2e}[2023/04/07]
\ProvidesClass{myclass}


%% 装载ctexart文档类
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexart}}
\ProcessOptions\relax
\LoadClass[12pt, a4paper, oneside]{ctexart}


% 装载宏包
\RequirePackage{doc} % 生成LaTeX文档的说明文档
\RequirePackage{titlesec} % 自定义标题的格式
\RequirePackage{mathrsfs} % 提供数学符号，如花体字母等
\RequirePackage{amsthm} % 提供定义定理、引理、证明等的命令
\RequirePackage{appendix} % 生成附录
\RequirePackage{bm} % 提供加粗数学符号的命令
\RequirePackage{graphicx} % 插入图片
\RequirePackage[utf8]{inputenc} % 支持UTF-8编码的输入
\RequirePackage[T1]{fontenc} % 支持T1编码的字体
\RequirePackage{amsfonts} % 提供常用的数学字体，如黑板粗体字母等
\RequirePackage{amssymb} % 提供常用的数学符号，如箭头、集合符号等
\RequirePackage{mhchem} % 提供排版化学式的命令
\RequirePackage{stmaryrd} % 提供排版数学符号的命令，如括号、大括号等
\RequirePackage{hyperref} % 生成超链接，如文内引用、目录链接等
\RequirePackage{indentfirst} % 设置首行缩进
\RequirePackage[export]{adjustbox} % 调整图片的大小和位置
\RequirePackage{subfigure} % 排版子图
\RequirePackage{geometry} % 设置页面的边距和大小
\RequirePackage[linewidth=1pt]{mdframed} % 生成带边框的文本框
\RequirePackage{lipsum} % 生成随机文本
\RequirePackage[dvipsnames]{xcolor} % 设置颜色
\RequirePackage{listings} % 排版代码
\RequirePackage{makecell} % 排版表格
\RequirePackage{caption} % 设置图片和表格的标题
\RequirePackage{array} % 排版表格
\RequirePackage{amsmath} % 提供常用的数学命令和环境，如矩阵、分式等


% 设置编号计数器
\numberwithin{figure}{subsection} % 图的计数器加上subsection前缀并重新计数
\numberwithin{table}{subsection} % 表的计数器加上subsection前缀并重新计数
\numberwithin{equation}{subsection} % 公式的计数器加上subsection前缀并重新计数


% 定义图片放入的文件夹
\graphicspath{ {./images/} } % 图片放入images文件夹下


% 定义标题、图注、表注、正文、超链接和代码样式和引用、超链接颜色
\titleformat{\section}{\bfseries\fontsize{16pt}{24pt}\selectfont}{\thesection}{0.5em}{} % 设置一级标题设置为粗体三号字，行距为 24pt，将章节编号和标题内容之间的距离设置为 0.5em
\titlespacing{\section}{0pt}{\baselineskip}{\baselineskip} % 设置一级标题前后的垂直间距
\titleformat{\subsection}{\bfseries\fontsize{14pt}{14pt}\selectfont}{\thesubsection}{0.5em}{} % 设置二级标题为黑体加粗，四号字，单倍行距
\titlespacing{\subsection}{0pt}{\baselineskip}{\baselineskip} % 设置二级标题前后的垂直间距
\titleformat{\subsubsection}{\bfseries\fontsize{12pt}{12pt}\selectfont}{\thesubsubsection}{0.5em}{} % 设置三级标题为黑体加粗，四号字，单倍行距
\titlespacing{\subsubsection}{0pt}{\baselineskip}{\baselineskip} % 设置二级标题前后的垂直间距
\captionsetup[figure]{font={small,rm},labelfont={bf},labelsep=period,justification=centering} % 设置图注为仿宋居中五号不加粗
\captionsetup[table]{font={small,rm},labelfont={bf},labelsep=period,justification=centering} % 设置表格标注为仿宋居中五号不加粗
\urlstyle{same} % 设置超链接的字体样式与正文相同
\setmainfont[BoldFont={仿宋},AutoFakeBold=true]{仿宋} % 设置正文字体为仿宋
\hypersetup{colorlinks=true,linkcolor=black,filecolor=black,urlcolor=black,citecolor=black} % 设定超链接、引用等的颜色
\lstset{
	language = matlab,
	backgroundcolor = \color{white!100}, % 背景色：淡黄
	basicstyle = \footnotesize\ttfamily, % 基本样式 + 脚注字体
	% rulesepcolor= \color{gray}, % 代码块边框颜色
	breaklines = true, % 代码过长则换行
	numbers = left, % 行号在左侧显示
	numberstyle = \footnotesize, % 行号字体
	keywordstyle = \color{blue}, % 关键字颜色
	commentstyle =\color{green!100}, % 注释颜色
	stringstyle = \color{red!100}, % 字符串颜色
	frame = shadowbox, % 用(带影子效果)方框框住代码块
	showspaces = false, % 不显示空格
	columns = fixed, % 字间距固定
	%escapeinside={} % 特殊自定分隔符：
	morekeywords = {as}, % 自加新的关键字(必须前后都是空格)
	deletendkeywords = {compile} % 删除内定关键字；删除错误标记的关键字用deletekeywords删！
} % 定义插入代码的样式


% 新定义或重新定义一些命令
\newcommand{\eqnsize}{\fontsize{12pt}{12pt}\selectfont} % 设置公式字体为小四号
\newcommand{\eqnnumsize}{\fontsize{12pt}{12pt}\selectfont} % 设置公式编号字体为小四号
\renewcommand{\theequation}{\thesubsection.\arabic{equation}} % 设置公式编号为subsection.equation
\renewcommand{\contentsname}{\hfill \textbf{目录} \hfill} % 设置目录两字居中 [LaTeX目录居中及目录字体设置_AdamShyly的博客-CSDN博客](http://t.csdn.cn/opIKF)
\renewcommand{\arraystretch}{1.5} % 重新定义表格中行高的倍数，将其设置为原来的1.5倍
\renewcommand\appendix{\par\setcounter{section}{0}\setcounter{subsection}{0}\gdef\thesection{附录 \Alph{section}}} % 重新定义附录的格式


% 定义了一些新环境
\newtheorem{theorem}{定理}[section] % 定义theorem的定理环境，它将在每个新的section中重新编号
\newtheorem{definition}[theorem]{定义} % 定义了一个名为definition的定理环境，它与“theorem”定理环境共享相同的计数器，并在theorem定理环境中使用相同的编号
\newtheorem{lemma}[theorem]{引理}
\newtheorem{corollary}[theorem]{推论}
\newtheorem{example}[theorem]{例}
\newtheorem{proposition}[theorem]{命题}


% 定义行距、缩进和页边距
\linespread{1.5} % 设置行距为1.5倍
\setlength{\parindent}{2em} % 设置段落缩进为2个字符
\geometry{left=2cm,right=2cm,top=3cm,bottom=4cm} % 页边距的设置

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                   生成封面                                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\makecover}
{
%% 生成校标
\thispagestyle{empty}
\begin{figure}[t]
    \centering
    \includegraphics[width=13cm]{R-C.jpg}
\end{figure}

%% 生成标题
\vspace*{1.5cm}
    \begin{center}
        \Huge\bfseries{群论在物理学中应用} \\ % 中文标题
		\Huge{\bfseries\sffamily Application of Group Theory in Physics} % 英文标题
    \end{center}
\vspace*{\fill}

%% 生成信息表格
\begin{table}[b]
    \centering
    \begin{tabular}{lp{14em}}% 表示一个左对齐的列和一个宽度为14em的列
    \bfseries\sffamily\Large{课\qquad 程：} & \Large\makecell{群论}         \\ \cline{2-2} %\cline{m-n}表示下划线从第m个单元格到第n个单元格
    \bfseries\sffamily\Large{姓\qquad 名：} & \Large\makecell{周慧娟}        \\ \cline{2-2} 
    \bfseries\sffamily\Large{学\qquad 号：} & \Large\makecell{2022112213}    \\ \cline{2-2} 
    \bfseries\sffamily\Large{时\qquad 间：} & \Large\makecell{2023年5月}      \\ \cline{2-2} 
    \end{tabular}
\end{table}
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                   生成摘要                                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\cabstract}
{
% 中文摘要页
\newpage
\thispagestyle{empty}
\renewcommand{\abstractname}{\Large\textbf{摘要}}
\begin{abstract}
	这是中文摘要。
	\par\textbf{关键词：}
\end{abstract}
}

\newcommand{\eabstract}
{
% 英文摘要页
\newpage
\thispagestyle{empty}
\renewcommand{\abstractname}{\Large\textbf{\sffamily Abstract}}
\begin{abstract}
	This is the English abstract.
	\par\textbf{\sffamily Keywords:}
\end{abstract}
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                   生成目录                                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\maketoc}
{
\newpage
\pagenumbering{Roman} % 页码形式：罗马数字
\thispagestyle{plain}
\setcounter{page}{1}
\tableofcontents
}